Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


RNS/Utilities/rnsd.py 64fee86ebc452d2eae716e4bb894df22b1c8f91d (64fee86e) Text, 19.81 KB

T8b949e#!/usr/bin/env python3

T8b949e# Reticulum License
T8b949e#
T8b949e# Copyright (c) 2016-2025 Mark Qvist
T8b949e#
T8b949e# Permission is hereby granted, free of charge, to any person obtaining a copy
T8b949e# of this software and associated documentation files (the "Software"), to deal
T8b949e# in the Software without restriction, including without limitation the rights
T8b949e# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
T8b949e# copies of the Software, and to permit persons to whom the Software is
T8b949e# furnished to do so, subject to the following conditions:
T8b949e#
T8b949e# - The Software shall not be used in any kind of system which includes amongst
T8b949e# its functions the ability to purposefully do harm to human beings.
T8b949e#
T8b949e# - The Software shall not be used, directly or indirectly, in the creation of
T8b949e# an artificial intelligence, machine learning or language model training
T8b949e# dataset, including but not limited to any use that contributes to the
T8b949e# training or development of such a model or algorithm.
T8b949e#
T8b949e# - The above copyright notice and this permission notice shall be included in
T8b949e# all copies or substantial portions of the Software.
T8b949e#
T8b949e# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
T8b949e# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
T8b949e# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
T8b949e# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
T8b949e# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
T8b949e# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
T8b949e# SOFTWARE.

Tff7b72import T7ee787RNS
Tff7b72import T7ee787argparse
Tff7b72import T7ee787time

Tff7b72from T7ee787RNST7ee787.T7ee787_version Tff7b72import Te6edf3__version__


Tff7b72def Td2a8ffprogram_setupTb4b4b4(Te6edf3configdirTb4b4b4, Te6edf3verbosity Tff7b72= T79c0ff0Tb4b4b4, Te6edf3quietness Tff7b72= T79c0ff0Tb4b4b4, Te6edf3service Tff7b72= Tff7b72FalseTb4b4b4, Te6edf3interactiveTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3targetverbosity Tff7b72= Te6edf3verbosityTff7b72-Te6edf3quietness

Tff7b72if Te6edf3serviceTb4b4b4:
Te6edf3targetlogdest Tff7b72= Te6edf3RNSTff7b72.Td2a8ffLOG_FILE
Te6edf3targetverbosity Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Te6edf3targetlogdest Tff7b72= Te6edf3RNSTff7b72.Td2a8ffLOG_STDOUT

Te6edf3reticulum Tff7b72= Te6edf3RNSTff7b72.Td2a8ffReticulumTb4b4b4(Te6edf3configdirTff7b72=Te6edf3configdirTb4b4b4, Te6edf3verbosityTff7b72=Te6edf3targetverbosityTb4b4b4, Te6edf3logdestTff7b72=Te6edf3targetlogdestTb4b4b4)
Tff7b72if Te6edf3reticulumTff7b72.Td2a8ffis_connected_to_shared_instanceTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffStarted rnsd version Tffd700{version}Ta5d6ff connected to another shared local instance, this is probably NOT what you want!Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3versionTff7b72=Te6edf3__version__Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_WARNINGTb4b4b4)
Tff7b72elseTb4b4b4:
T8b949e# TODO: Rethink why this was added
T8b949e# if RNS.Reticulum.get_instance().shared_instance_interface:
T8b949e# RNS.Reticulum.get_instance().shared_instance_interface.server.daemon_threads = True
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffStarted rnsd version Tffd700{version}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3versionTff7b72=Te6edf3__version__Tb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_NOTICETb4b4b4)

Tff7b72if Te6edf3interactiveTb4b4b4: Tff7b72import T7ee787codeTb4b4b4; Te6edf3codeTff7b72.Td2a8ffinteractTb4b4b4(Te6edf3localTff7b72=Tffa657globalsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72while Tff7b72TrueTb4b4b4: Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff1Tb4b4b4)

Tff7b72def Td2a8ffmainTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3parser Tff7b72= Te6edf3argparseTff7b72.Td2a8ffArgumentParserTb4b4b4(Te6edf3descriptionTff7b72=Ta5d6ff"Ta5d6ffReticulum Network Stack DaemonTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--configTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffstoreTa5d6ff"Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72NoneTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffpath to alternative Reticulum config directoryTa5d6ff"Tb4b4b4, Tffa657typeTff7b72=Tffa657strTb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff'Ta5d6ff-vTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--verboseTa5d6ff'Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff'Ta5d6ffcountTa5d6ff'Tb4b4b4, Te6edf3defaultTff7b72=T79c0ff0Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff'Ta5d6ff-qTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--quietTa5d6ff'Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff'Ta5d6ffcountTa5d6ff'Tb4b4b4, Te6edf3defaultTff7b72=T79c0ff0Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff'Ta5d6ff-sTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--serviceTa5d6ff'Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff'Ta5d6ffstore_trueTa5d6ff'Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffrnsd is running as a service and should log to fileTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff'Ta5d6ff-iTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff--interactiveTa5d6ff'Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff'Ta5d6ffstore_trueTa5d6ff'Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffdrop into interactive shell after initialisationTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--exampleconfigTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff'Ta5d6ffstore_trueTa5d6ff'Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffprint verbose configuration example to stdout and exitTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--versionTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4, Te6edf3versionTff7b72=Ta5d6ff"Ta5d6ffrnsd Tffd700{version}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3versionTff7b72=Te6edf3__version__Tb4b4b4)Tb4b4b4)
Te6edf3args Tff7b72= Te6edf3parserTff7b72.Td2a8ffparse_argsTb4b4b4(Tb4b4b4)

Tff7b72if Te6edf3argsTff7b72.Td2a8ffexampleconfigTb4b4b4:
Tffa657printTb4b4b4(Te6edf3__example_rns_config__Tb4b4b4)
Te6edf3exitTb4b4b4(Tb4b4b4)

Tff7b72if Te6edf3argsTff7b72.Td2a8ffconfigTb4b4b4:
Te6edf3configarg Tff7b72= Te6edf3argsTff7b72.Td2a8ffconfig
Tff7b72elseTb4b4b4:
Te6edf3configarg Tff7b72= Tff7b72None

Te6edf3program_setupTb4b4b4(Te6edf3configdir Tff7b72= Te6edf3configargTb4b4b4, Te6edf3verbosityTff7b72=Te6edf3argsTff7b72.Td2a8ffverboseTb4b4b4, Te6edf3quietnessTff7b72=Te6edf3argsTff7b72.Td2a8ffquietTb4b4b4, Te6edf3serviceTff7b72=Te6edf3argsTff7b72.Td2a8ffserviceTb4b4b4, Te6edf3interactiveTff7b72=Te6edf3argsTff7b72.Td2a8ffinteractiveTb4b4b4)

Tff7b72except Tf85149KeyboardInterruptTb4b4b4:
Tffa657printTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Te6edf3exitTb4b4b4(Tb4b4b4)

Te6edf3__example_rns_config__ Tff7b72= Ta5d6ff'''Ta5d6ff# This is an example Reticulum config file.
Ta5d6ff# You should probably edit it to include any additional,
Ta5d6ff# interfaces and settings you might need.

Ta5d6ff[reticulum]

Ta5d6ff# If you enable Transport, your system will route traffic
Ta5d6ff# for other peers, pass announces and serve path requests.
Ta5d6ff# This should be done for systems that are suited to act
Ta5d6ff# as transport nodes, ie. if they are stationary and
Ta5d6ff# always-on. This directive is optional and can be removed
Ta5d6ff# for brevity.

Ta5d6ffenable_transport = no


Ta5d6ff# By default, the first program to launch the Reticulum
Ta5d6ff# Network Stack will create a shared instance, that other
Ta5d6ff# programs can communicate with. Only the shared instance
Ta5d6ff# opens all the configured interfaces directly, and other
Ta5d6ff# local programs communicate with the shared instance over
Ta5d6ff# a local socket. This is completely transparent to the
Ta5d6ff# user, and should generally be turned on. This directive
Ta5d6ff# is optional and can be removed for brevity.

Ta5d6ffshare_instance = yes


Ta5d6ff# If you want to run multiple *different* shared instances
Ta5d6ff# on the same system, you will need to specify different
Ta5d6ff# instance names for each. On platforms supporting domain
Ta5d6ff# sockets, this can be done with the instance_name option:

Ta5d6ffinstance_name = default

Ta5d6ff# Some platforms donTa5d6ff'Ta5d6fft support domain sockets, and if that
Ta5d6ff# is the case, you can isolate different instances by
Ta5d6ff# specifying a unique set of ports for each:

Ta5d6ff# shared_instance_port = 37428
Ta5d6ff# instance_control_port = 37429


Ta5d6ff# If you want to explicitly use TCP for shared instance
Ta5d6ff# communication, instead of domain sockets, this is also
Ta5d6ff# possible, by using the following option:

Ta5d6ff# shared_instance_type = tcp


Ta5d6ff# On systems where running instances may not have access
Ta5d6ff# to the same shared Reticulum configuration directory,
Ta5d6ff# it is still possible to allow full interactivity for
Ta5d6ff# running instances, by manually specifying a shared RPC
Ta5d6ff# key. In almost all cases, this option is not needed, but
Ta5d6ff# it can be useful on operating systems such as Android.
Ta5d6ff# The key must be specified as bytes in hexadecimal.

Ta5d6ff# rpc_key = e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790


Ta5d6ff# It is possible to allow remote management of Reticulum
Ta5d6ff# systems using the various built-in utilities, such as
Ta5d6ff# rnstatus and rnpath. You will need to specify one or
Ta5d6ff# more Reticulum Identity hashes for authenticating the
Ta5d6ff# queries from client programs. For this purpose, you can
Ta5d6ff# use existing identity files, or generate new ones with
Ta5d6ff# the rnid utility.

Ta5d6ff# enable_remote_management = yes
Ta5d6ff# remote_management_allowed = 9fb6d773498fb3feda407ed8ef2c3229, 2d882c5586e548d79b5af27bca1776dc


Ta5d6ff# For easier management, discovery and configuration of
Ta5d6ff# networks with many individual transport instances,
Ta5d6ff# you can specify a network identity to be used across
Ta5d6ff# a set of instances. If sending interface discovery
Ta5d6ff# announces, these will all be signed by the specified
Ta5d6ff# network identity, and other nodes discovering your
Ta5d6ff# interfaces will be able to identify that they belong
Ta5d6ff# to the same network, even though they exist on different
Ta5d6ff# transport nodes.

Ta5d6ff# network_identity = ~/.reticulum/storage/identity/network


Ta5d6ff# It is possible to configure the global default interface
Ta5d6ff# gravity. This value will be used if an interface does
Ta5d6ff# not have a specific gravity value in its configuration.

Ta5d6ff# default_gravity = 0

Ta5d6ff# You can configure whether Reticulum should discover
Ta5d6ff# available interfaces from other Transport Instances over
Ta5d6ff# the network. If this option is enabled, Reticulum will
Ta5d6ff# collect interface information discovered from the network.

Ta5d6ff# discover_interfaces = no


Ta5d6ff# If you only want to discover interfaces from specific
Ta5d6ff# networks, you can provide a list of network identities
Ta5d6ff# from which to discover interfaces. If this option is not
Ta5d6ff# provided, interfaces will be discovered from all transport
Ta5d6ff# instances on all connected networks.

Ta5d6ff# interface_discovery_sources = 78616ff7c4b8d3886d67d494b440f333, cb127015e13aa6ea1e0a606cdc9123d0


Ta5d6ff# It is possible to automatically bring up and connect new
Ta5d6ff# interfaces discovered over the network. This option is
Ta5d6ff# disabled by default, but allows you to specify a maximum
Ta5d6ff# number of discovered interfaces to automatically connect.
Ta5d6ff# Additionally, if this option is enabled, Reticulum will
Ta5d6ff# also try to autoconnect available auto-discovered inter-
Ta5d6ff# faces on startup, up to the maximum number specified.

Ta5d6ff# autoconnect_discovered_interfaces = 0


Ta5d6ff# To prevent interface discovery spamming, a valid crypto-
Ta5d6ff# graphic stamp is required per announced interface. You
Ta5d6ff# can configure the minimum required value to accept as
Ta5d6ff# valid for discovered interfaces.

Ta5d6ff# required_discovery_value = 14


Ta5d6ff# You can configure Reticulum to panic and forcibly close
Ta5d6ff# if an unrecoverable interface error occurs, such as the
Ta5d6ff# hardware device for an interface disappearing. This is
Ta5d6ff# an optional directive, and can be left out for brevity.
Ta5d6ff# This behaviour is disabled by default.

Ta5d6ff# panic_on_interface_error = no

Ta5d6ff# You can specify which mode discovered interfaces should
Ta5d6ff# be created with when auto-connecting.

Ta5d6ff# autoconnect_interface_mode = gw


Ta5d6ff# It is possible to allow announces from auto-connected
Ta5d6ff# interfaces to propagate announces to internal-mode
Ta5d6ff# interfaces, even if the auto-connected interfaceTa5d6ff'Ta5d6ffs mode
Ta5d6ff# would normally not allow for this.

Ta5d6ff# autoconnect_announces_to_internal = yes


Ta5d6ff# You can configure the gravity for discovered interfaces
Ta5d6ff# that are auto-connected.

Ta5d6ff# autoconnect_interface_gravity = 0


Ta5d6ff# When Transport is enabled, it is possible to allow the
Ta5d6ff# Transport Instance to respond to probe requests from
Ta5d6ff# the rnprobe utility. This can be a useful tool to test
Ta5d6ff# connectivity. When this option is enabled, the probe
Ta5d6ff# destination will be generated from the Identity of the
Ta5d6ff# Transport Instance, and printed to the log at startup.
Ta5d6ff# Optional, and disabled by default.

Ta5d6ff# respond_to_probes = no


Ta5d6ff# You can publish your local list of blackholed identities
Ta5d6ff# for other transport instances to use for automatic,
Ta5d6ff# network-wide blackhole management.

Ta5d6ff# publish_blackhole = no


Ta5d6ff# List of remote transport identities from which to auto-
Ta5d6ff# matically source lists of blackholed identities.
Ta5d6ff#
Ta5d6ff# If youTa5d6ff'Ta5d6ffre connecting to a large external network, you
Ta5d6ff# can use one or more external blackhole list to block
Ta5d6ff# spammy and excessive announces onto your network. This
Ta5d6ff# funtionality is especially useful if youTa5d6ff'Ta5d6ffre hosting public
Ta5d6ff# entrypoints or gateways. The list source below provides a
Ta5d6ff# functional example, but better, more timely maintained
Ta5d6ff# lists probably exist in the community.

Ta5d6ff# blackhole_sources = 521c87a83afb8f29e4455e77930b973b


Ta5d6ff# You can set the interval in minutes at which remote
Ta5d6ff# blackhole sources are updated. Defaults to one hour.

Ta5d6ff# blackhole_update_interval = 60


Ta5d6ff# When not running as a transport node, it is possible to
Ta5d6ff# force the use of the same, static transport identity
Ta5d6ff# for every instance start. Defaults to using a new identity
Ta5d6ff# at every instance start, if transport is disabled.

Ta5d6ff# static_transport_identity = no


Ta5d6ff[logging]
Ta5d6ff# Valid log levels are 0 through 8:
Ta5d6ff# 0: Log only critical information
Ta5d6ff# 1: Log errors and lower log levels
Ta5d6ff# 2: Log warnings and lower log levels
Ta5d6ff# 3: Log notices and lower log levels
Ta5d6ff# 4: Log info and lower (this is the default)
Ta5d6ff# 5: Verbose logging
Ta5d6ff# 6: Debug logging
Ta5d6ff# 7: Path logging
Ta5d6ff# 8: Extreme logging

Ta5d6ffloglevel = 4

Ta5d6ff# You can disable timestamp inclusion in logs. Useful if
Ta5d6ff# you want to use an external logging tool that provides
Ta5d6ff# its own timestamps or custom formatting.

Ta5d6ff# logtimestamps = no


Ta5d6ff# The interfaces section defines the physical and virtual
Ta5d6ff# interfaces Reticulum will use to communicate on. This
Ta5d6ff# section will contain examples for a variety of interface
Ta5d6ff# types. You can modify these or use them as a basis for
Ta5d6ff# your own config, or simply remove the unused ones.

Ta5d6ff[interfaces]

Ta5d6ff # This interface enables communication with other
Ta5d6ff # link-local Reticulum nodes over UDP. It does not
Ta5d6ff # need any functional IP infrastructure like routers
Ta5d6ff # or DHCP servers, but will require that at least link-
Ta5d6ff # local IPv6 is enabled in your operating system, which
Ta5d6ff # should be enabled by default in almost any OS. See
Ta5d6ff # the Reticulum Manual for more configuration options.

Ta5d6ff [[Default Interface]]
Ta5d6ff type = AutoInterface
Ta5d6ff enabled = yes


Ta5d6ff # The following example enables communication with other
Ta5d6ff # local Reticulum peers using UDP broadcasts.
Ta5d6ff
Ta5d6ff [[UDP Interface]]
Ta5d6ff type = UDPInterface
Ta5d6ff enabled = no
Ta5d6ff listen_ip = 0.0.0.0
Ta5d6ff listen_port = 4242
Ta5d6ff forward_ip = 255.255.255.255
Ta5d6ff forward_port = 4242

Ta5d6ff # The above configuration will allow communication
Ta5d6ff # within the local broadcast domains of all local
Ta5d6ff # IP interfaces.

Ta5d6ff # Instead of specifying listen_ip, listen_port,
Ta5d6ff # forward_ip and forward_port, you can also bind
Ta5d6ff # to a specific network device like below.

Ta5d6ff # device = eth0
Ta5d6ff # port = 4242

Ta5d6ff # Assuming the eth0 device has the address
Ta5d6ff # 10.55.0.72/24, the above configuration would
Ta5d6ff # be equivalent to the following manual setup.
Ta5d6ff # Note that we are both listening and forwarding to
Ta5d6ff # the broadcast address of the network segments.

Ta5d6ff # listen_ip = 10.55.0.255
Ta5d6ff # listen_port = 4242
Ta5d6ff # forward_ip = 10.55.0.255
Ta5d6ff # forward_port = 4242

Ta5d6ff # You can of course also communicate only with
Ta5d6ff # a single IP address

Ta5d6ff # listen_ip = 10.55.0.15
Ta5d6ff # listen_port = 4242
Ta5d6ff # forward_ip = 10.55.0.16
Ta5d6ff # forward_port = 4242


Ta5d6ff # This example demonstrates a TCP server interface.
Ta5d6ff # It will listen for incoming connections on the
Ta5d6ff # specified IP address and port number.
Ta5d6ff
Ta5d6ff [[TCP Server Interface]]
Ta5d6ff type = TCPServerInterface
Ta5d6ff enabled = no

Ta5d6ff # This configuration will listen on all IP
Ta5d6ff # interfaces on port 4242
Ta5d6ff
Ta5d6ff listen_ip = 0.0.0.0
Ta5d6ff listen_port = 4242

Ta5d6ff # Alternatively you can bind to a specific IP
Ta5d6ff
Ta5d6ff # listen_ip = 10.0.0.88
Ta5d6ff # listen_port = 4242

Ta5d6ff # Or a specific network device
Ta5d6ff
Ta5d6ff # device = eth0
Ta5d6ff # port = 4242


Ta5d6ff # To connect to a TCP server interface, you would
Ta5d6ff # naturally use the TCP client interface. HereTa5d6ff'Ta5d6ffs
Ta5d6ff # an example. The target_host can either be an IP
Ta5d6ff # address or a hostname

Ta5d6ff [[TCP Client Interface]]
Ta5d6ff type = TCPClientInterface
Ta5d6ff enabled = no
Ta5d6ff target_host = 127.0.0.1
Ta5d6ff target_port = 4242


Ta5d6ff # This example shows how to make your Reticulum
Ta5d6ff # instance available over I2P, and connect to
Ta5d6ff # another I2P peer. Please be aware that you
Ta5d6ff # must have an I2P router running on your system
Ta5d6ff # with the SAMv3 API enabled for this to work.

Ta5d6ff [[I2P]]
Ta5d6ff type = I2PInterface
Ta5d6ff enabled = no
Ta5d6ff connectable = yes
Ta5d6ff peers = ykzlw5ujbaqc2xkec4cpvgyxj257wcrmmgkuxqmqcur7cq3w3lha.b32.i2p


Ta5d6ff # HereTa5d6ff'Ta5d6ffs an example of how to add a LoRa interface
Ta5d6ff # using the RNode LoRa transceiver.

Ta5d6ff [[RNode LoRa Interface]]
Ta5d6ff type = RNodeInterface

Ta5d6ff # Enable interface if you want use it!
Ta5d6ff enabled = no

Ta5d6ff # Serial port for the device
Ta5d6ff port = /dev/ttyUSB0

Ta5d6ff # It is also possible to use BLE devices
Ta5d6ff # instead of wired serial ports. The
Ta5d6ff # target RNode must be paired with the
Ta5d6ff # host device before connecting. BLE
Ta5d6ff # devices can be connected by name,
Ta5d6ff # BLE MAC address or by any available.
Ta5d6ff
Ta5d6ff # Connect to specific device by name
Ta5d6ff # port = ble://RNode 3B87

Ta5d6ff # Or by BLE MAC address
Ta5d6ff # port = ble://F4:12:73:29:4E:89

Ta5d6ff # Or connect to the first available,
Ta5d6ff # paired device
Ta5d6ff # port = ble://

Ta5d6ff # Set frequency to 867.2 MHz
Ta5d6ff frequency = 867200000

Ta5d6ff # Set LoRa bandwidth to 125 KHz
Ta5d6ff bandwidth = 125000

Ta5d6ff # Set TX power to 7 dBm (5 mW)
Ta5d6ff txpower = 7

Ta5d6ff # Select spreading factor 8. Valid
Ta5d6ff # range is 7 through 12, with 7
Ta5d6ff # being the fastest and 12 having
Ta5d6ff # the longest range.
Ta5d6ff spreadingfactor = 8

Ta5d6ff # Select coding rate 5. Valid range
Ta5d6ff # is 5 throough 8, with 5 being the
Ta5d6ff # fastest, and 8 the longest range.
Ta5d6ff codingrate = 5

Ta5d6ff # You can configure the RNode to send
Ta5d6ff # out identification on the channel with
Ta5d6ff # a set interval by configuring the
Ta5d6ff # following two parameters. The trans-
Ta5d6ff # ceiver will only ID if the set
Ta5d6ff # interval has elapsed since itTa5d6ff'Ta5d6ffs last
Ta5d6ff # actual transmission. The interval is
Ta5d6ff # configured in seconds.
Ta5d6ff # This option is commented out and not
Ta5d6ff # used by default.
Ta5d6ff # id_callsign = MYCALL-0
Ta5d6ff # id_interval = 600

Ta5d6ff # For certain homebrew RNode interfaces
Ta5d6ff # with low amounts of RAM, using packet
Ta5d6ff # flow control can be useful. By default
Ta5d6ff # it is disabled.
Ta5d6ff flow_control = False
Ta5d6ff
Ta5d6ff
Ta5d6ff # An example KISS modem interface. Useful for running
Ta5d6ff # Reticulum over packet radio hardware.

Ta5d6ff [[Packet Radio KISS Interface]]
Ta5d6ff type = KISSInterface

Ta5d6ff # Enable interface if you want use it!
Ta5d6ff enabled = no

Ta5d6ff # Serial port for the device
Ta5d6ff port = /dev/ttyUSB1

Ta5d6ff # Set the serial baud-rate and other
Ta5d6ff # configuration parameters.
Ta5d6ff speed = 115200
Ta5d6ff databits = 8
Ta5d6ff parity = none
Ta5d6ff stopbits = 1

Ta5d6ff # Set the modem preamble. A 150ms
Ta5d6ff # preamble should be a reasonable
Ta5d6ff # default, but may need to be
Ta5d6ff # increased for radios with slow-
Ta5d6ff # opening squelch and long TX/RX
Ta5d6ff # turnaround
Ta5d6ff preamble = 150

Ta5d6ff # Set the modem TX tail. In most
Ta5d6ff # cases this should be kept as low
Ta5d6ff # as possible to not waste airtime.
Ta5d6ff txtail = 10

Ta5d6ff # Configure CDMA parameters. These
Ta5d6ff # settings are reasonable defaults.
Ta5d6ff persistence = 200
Ta5d6ff slottime = 20

Ta5d6ff # You can configure the interface to send
Ta5d6ff # out identification on the channel with
Ta5d6ff # a set interval by configuring the
Ta5d6ff # following two parameters. The KISS
Ta5d6ff # interface will only ID if the set
Ta5d6ff # interval has elapsed since itTa5d6ff'Ta5d6ffs last
Ta5d6ff # actual transmission. The interval is
Ta5d6ff # configured in seconds.
Ta5d6ff # This option is commented out and not
Ta5d6ff # used by default.
Ta5d6ff # id_callsign = MYCALL-0
Ta5d6ff # id_interval = 600

Ta5d6ff # Whether to use KISS flow-control.
Ta5d6ff # This is useful for modems that have
Ta5d6ff # a small internal packet buffer, but
Ta5d6ff # support packet flow control instead.
Ta5d6ff flow_control = false


Ta5d6ff # If youTa5d6ff'Ta5d6ffre using Reticulum on amateur radio spectrum,
Ta5d6ff # you might want to use the AX.25 KISS interface. This
Ta5d6ff # way, Reticulum will automatically encapsulate itTa5d6ff'Ta5d6ffs
Ta5d6ff # traffic in AX.25 and also identify your stations
Ta5d6ff # transmissions with your callsign and SSID.
Ta5d6ff #
Ta5d6ff # Only do this if you really need to! Reticulum doesnTa5d6ff'Ta5d6fft
Ta5d6ff # need the AX.25 layer for anything, and it incurs extra
Ta5d6ff # overhead on every packet to encapsulate in AX.25.
Ta5d6ff #
Ta5d6ff # A more efficient way is to use the plain KISS interface
Ta5d6ff # with the beaconing functionality described above.

Ta5d6ff [[Packet Radio AX.25 KISS Interface]]
Ta5d6ff type = AX25KISSInterface

Ta5d6ff # Set the station callsign and SSID
Ta5d6ff callsign = NO1CLL
Ta5d6ff ssid = 0

Ta5d6ff # Enable interface if you want use it!
Ta5d6ff enabled = no

Ta5d6ff # Serial port for the device
Ta5d6ff port = /dev/ttyUSB2

Ta5d6ff # Set the serial baud-rate and other
Ta5d6ff # configuration parameters.
Ta5d6ff speed = 115200
Ta5d6ff databits = 8
Ta5d6ff parity = none
Ta5d6ff stopbits = 1

Ta5d6ff # Whether to use KISS flow-control.
Ta5d6ff # This is useful for modems with a
Ta5d6ff # small internal packet buffer.
Ta5d6ff flow_control = false

Ta5d6ff # Set the modem preamble. A 150ms
Ta5d6ff # preamble should be a reasonable
Ta5d6ff # default, but may need to be
Ta5d6ff # increased for radios with slow-
Ta5d6ff # opening squelch and long TX/RX
Ta5d6ff # turnaround
Ta5d6ff preamble = 150

Ta5d6ff # Set the modem TX tail. In most
Ta5d6ff # cases this should be kept as low
Ta5d6ff # as possible to not waste airtime.
Ta5d6ff txtail = 10

Ta5d6ff # Configure CDMA parameters. These
Ta5d6ff # settings are reasonable defaults.
Ta5d6ff persistence = 200
Ta5d6ff slottime = 20

Ta5d6ff'''

Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Te6edf3mainTb4b4b4(Tb4b4b4)


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────